package co.edu.eam.persitencia.entidades;

import java.io.Serializable;
import java.util.Date;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;


/**
 * Entidad que representa la historia clinica.
 *
 */
@NamedQueries({
    @NamedQuery(name=HistoriaClinica.CONSULTA_LISTA_TODAS_HISTORIAS,query="select his from HistoriaClinica his"),
    @NamedQuery(name=HistoriaClinica.CONSULTA_HISTORIACLINICA,
     query=("select his from HistoriaClinica his where his.paciente.documento=:"+HistoriaClinica.PARAMETRO_PACIENTE))
    
})
@Entity
@Table(name="clinica_HistoriaClinica")
public class HistoriaClinica implements Serializable {
    
    public static final String CONSULTA_LISTA_TODAS_HISTORIAS="HistoriaClinica.listar";
        
    public static final String CONSULTA_HISTORIACLINICA="HistoriaClinica";
    public static final String PARAMETRO_PACIENTE="cedula";

    /**
     * identificador unico de la entidad.
     */
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name="HistoriaClinica_id")
    private Long id;
    /**
     * Paciente due�o de la historia clinica
     */
    @JoinColumn(name="historiaClinica_paciente")
    @OneToOne
    private Paciente paciente;
    /**
     * fecha de apertura de la historia clinica.
     */
    @Column(name="HistoriaClinica_fechaApertura")
    @Temporal(javax.persistence.TemporalType.DATE)
    private Date fechaApertura;
        
    /**
     * lista de comentarios del sistema corporal.
     */
    @OneToMany(mappedBy = "historiaClinica",cascade= CascadeType.ALL)
    private List<DetalleComentarioSistema> detalleComentarioSistema;
    /**
     * lista de comentarios del sistema corporal.
     */
    
    @OneToMany(mappedBy = "historiaClinica",cascade= CascadeType.ALL)
    private List<DetalleComentarioRevision> detalleComentarioRevision;
    
   
    @OneToOne(mappedBy = "historia",cascade= CascadeType.ALL)
    private Antecedente antecedentesMedicos;
    
    /**
     * lista de detalles de la historia clinica.
     */ 
    
    @OneToMany(mappedBy = "historia",cascade= CascadeType.ALL)
    private List<DetalleHistoriaClinica> detalleHistoriaClinica;
    
    
    @OneToOne(mappedBy = "historiaClinica",cascade= CascadeType.ALL)
    private ExamenFisico examenFisico;
    

    public List<DetalleComentarioRevision> getDetalleComentarioRevision() {
        return detalleComentarioRevision;
    }

    public void setDetalleComentarioRevision(List<DetalleComentarioRevision> detalleComentarioRevision) {
        this.detalleComentarioRevision = detalleComentarioRevision;
    }

    public Antecedente getAntecedentesMedicos() {
        return antecedentesMedicos;
    }

    public void setAntecedentesMedicos(Antecedente antecedentesMedicos) {
        this.antecedentesMedicos = antecedentesMedicos;
    }

    public ExamenFisico getExamenFisico() {
        return examenFisico;
    }

    public void setExamenFisico(ExamenFisico examenFisico) {
        this.examenFisico = examenFisico;
    }

    public HistoriaClinica() {
      
    }

    /**
     * @return the id
     */
    public Long getId() {
        return id;
    }

    /**
     * @param id the id to set
     */
    public void setId(Long id) {
        this.id = id;
    }

    /**
     * @return the paciente
     */
    public Paciente getPaciente() {
        return paciente;
    }

    /**
     * @param paciente the paciente to set
     */
    public void setPaciente(Paciente paciente) {
        this.paciente = paciente;
    }

    /**
     * @return the fechaApertura
     */
    public Date getFechaApertura() {
        return fechaApertura;
    }

    /**
     * @param fechaApertura the fechaApertura to set
     */
    public void setFechaApertura(Date fechaApertura) {
        this.fechaApertura = fechaApertura;
    }

     /**
     * @return the antecedentes
     */
   

    /**
     * @return the detalleComentarioSistema
     */
    public List<DetalleComentarioSistema> getDetalleComentarioSistema() {
        return detalleComentarioSistema;
    }

   

  

    /**
     * @param detalleComentarioSistema the detalleComentarioSistema to set
     */
    public void setDetalleComentarioSistema(
            List<DetalleComentarioSistema> detalleComentarioSistema) {
        this.detalleComentarioSistema = detalleComentarioSistema;
    }
    
    public void setDetallecomenterioRevision(
            List<DetalleComentarioRevision>detalleComentarioRevision){
            this.detalleComentarioRevision = detalleComentarioRevision;
    }

    /**
     * @return the detalleHistoriaClinica
     */
    public List<DetalleHistoriaClinica> getDetalleHistoriaClinica() {
        return detalleHistoriaClinica;
    }

    /**
     * @param detalleHistoriaClinica the detalleHistoriaClinica to set
     */
    public void setDetalleHistoriaClinica(List<DetalleHistoriaClinica> detalleHistoriaClinica) {
        this.detalleHistoriaClinica = detalleHistoriaClinica;
    }
    //TODO:falta toString
}
